# -*- coding:utf8 -*- #
# -----------------------------------------------------------------------------------
# ProjectName:  smart-meter-iot-test
# FileName:     report_data_body.py
# Author  :     
# Datetime:     2023/4/7 23:46
# Description： 水表上报数据定义。
# -----------------------------------------------------------------------------------
from common.util.logUtil.logUtil import LoggerUtil
from common.util.randomUtil.randomUtil import random_int
from common.util.timeUtil.timeUtil import get_timestamp

logger = LoggerUtil()


# 室内机
def indoor_unit_data_body(idu_add: str, cumTime: str) -> dict:
    """

    :param cumTime:
    :param idu_add: 室内机地址  主机 + 外机 + 内机地址（保证唯一）
    :return: 上报报文内容
    """
    reportBody = {
        "method": "thing.event.property.post",
        "params": {
            # 室内机地址  主机 + 外机 + 内机地址（保证唯一）
            "addr": idu_add,
            # 锁定状态
            # 0：无锁
            # 1：开关锁定
            # 2：温度锁定
            # 3：开关、温度锁定
            # 4：模式锁定
            # 5：模式、开关锁定
            # 6：模式、温度锁定
            # 7：模式、温度、开关锁定
            "lock": 0,
            # 开关状态 0：关闭；1：开启
            "open": 1,
            # 运行模式 1：制冷；2：制热；3：送风；4：除湿
            "operate": 1,
            # 环境温度
            "TEMP": 99,
            # 设定温度 取值范围：16 ~ 32 摄氏度
            "setTEMP": 32,
            # 风速 0：自动；1：低速；2：中速；3：高速；4：微风
            "speed": 4,
            # 当日累计运行时长
            "cumTime": 100,
            # 运行状态 0：故障；1：正常
            "RUN": 1,
            # 温度锁定上/下限 17 ~ 31 摄氏度
            # 3131 前两位：温度上限，后两位：温度下限
            # 17：温度下限
            "TEMPLK": 3117,

        }
    }
    return reportBody


# 基站(主机)信息上报
def collector_data_body(deviceNo: str) -> dict:
    reportBody = {
        "method": "thing.event.property.post",
        "params": {
            # 基站设备编号
            "CH:BSNo": deviceNo,
            # 基站固件版本
            "CH:BSFW": "110",
            # 主机设备编号
            "CH:CHNo": "123452467878987987",
            # 主机固件版本
            "CH:CHFW": "1",
            # 主机协议版本
            "CH:CHProto": "1",
            # 基站信号强度
            "CH:signal": 10,
            # 基站温度  -15 - 100 摄氏度
            "CH:temper": 10,
            # 循环周期
            "CH:cycle": 15,
            # ICCID
            "CH:ICCID": "1",
            # IEMI
            "CH:IEMI": "1",
            # 主机型号
            "CH:CHModel": "1"
        }
    }
    return reportBody


# 故障上报
def error_data_body(deviceNo: str) -> dict:
    reportBody = {
        "method": "thing.event.abnormal:error.post",
        "params": {
            "errorCode": "10001",
            "type": 1,
            "deviceNo": deviceNo
        }
    }
    return reportBody


def get_iduList(num):
    associationStr = ""
    for i in range(0, num):
        addr = f"{random_int(100, 256)}_{random_int(100000, 999999)}"
        associationStr = associationStr + "," + addr
    return associationStr[1::]


# 关联关系上报
def association_data_body(deviceNo: str):
    reportBody = {
        "method": "user.update",
        "params": {
            "BSNo": deviceNo,
            # 0：设备扫描上报的关联关系，所有节点数据
            # 1：设备扫描上报的关联关系，请求关联关系时指定节点数据。其他节点信息为空
            # 2：平台确认的关联关系，
            "type": 0,
            "timestamp": get_timestamp(),
            "nodeList":
                [
                    {
                        "node": 1,
                        "oduAdd": "001",
                        "iduList": ["101"]
                    },
                    {
                        "node": 2,
                        "oduAdd": "002",
                        "iduList": ["201", "202"]
                    },
                    {
                        "node": 3,
                        "oduAdd": "003",
                        "iduList": ["301", "302", "303"]
                    },
                    {
                        "node": 4,
                        "oduAdd": "004",
                        "iduList": ["401", "402", "403", "404"]
                    }
                ]
        }
    }
    return reportBody


def indoorunit_switchonoff_data_body(addr: str):
    params = {
        "params": {
            "addr": addr,
            "type": 1,
            "timestamp": get_timestamp()
        }
    }
    return params


if __name__ == '__main__':
    print(type(indoorunit_switchonoff_data_body(111)))
